สำหรับ database เล็กๆ ใช้ phpmyadmin ก็สะดวกดี แต่ถ้า database ขนาดใหญ่ หลายล้าน records ล่ะ ก็คงไม่สะดวก ยิ่ง Server config ให้ PHP เป็น safe mode ก็จะมีปัญหากับ time-out ซึ่งทำให้ใช้ phpMyAdmin ไม่ได้

เขียน PHP scripts ให้ backup database โดยการ generate เป็น ไฟล์ SQL เก็บเอาไว้
มันก็ใช้งานได้ดีอยู่.. แต่มันทำงานได้ช้ามาก (เกือบ 1 ชั่วโมง สำหรับ database ขนาด 300 MB)

สำหรับ database ขนาดใหญ่แล้ว ผมคิดว่า mysqldump นั้นมีประสิทธิภาพมากที่สุดแล้ว
ทั้งๆที่มากับ mysql อยู่แล้ว ทำไมจึงมองข้ามก็ไม่รู้ วันนี้ก็เลยมาลองใช้สิ่งที่ MySQL จัดเตรียมมาให้แล้ว

การ backup
คำสั่งสำหรับ backup ฐานข้อมูล ของ mysql คือ mysqldump รูปแบบการใช้งานมีดังต่อไปนี้

อ้างอิง:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
shell> mysqldump [options] --all-databases
สำหรับรายละเอียดของ options ต่างๆ ดูที่ MySQL :: MySQL 5.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program
ตัวอย่างการใช้งาน
Code:
#mysqldump -u root -p mydatabase > db.sql
dump database
Code:
mysqldump -u root -p mydatabase -tables customer > db.sql
dump เฉพาะ tables customer

สำหรับบน Linux จะมี mysqlhotcopy ให้ใช้ด้วย พัฒนาโดยคุณ Tim Bunce เขียนด้วย PERL เพราะท่านเล่น lock และ flush จากนั้นก็ copy file มาซะงั้น

อันนี้เป็นตัวอย่างที่ผมใช้อยู่

Code:
mysqldump -u root -pMyPassword --all-database --lock-all-table | bzip2 -c > db-backup_$(date +%Y%m%d_%H%M%S).sql.bz2
จะได้ db-backup_20071926_070420.sql.bz2

การ restore
ใช้
Code:
#mysql -u root -p database < db.sql
ง่ายๆ และรวดเร็วดี อันนี้ในกรณี restore ทั้ง database

แต่ถ้าต้องการเลือก database ใช้ mysqlimport

Code:
mysql -u root -pMyPassword MyDatabase < db.sql

WARNING
คำเตือน: นี่คือกระทู้เก่าแล้ว
การสนทนานี้เป็นที่เก่ากว่า 90 วัน ข้อมูลที่ปรากฏอยู่ในนั้นอาจไม่เป็นปัจจุบัน


กระทู้อื่นๆล่าสุดในฟอรั่มเดียวกันนี้: